/**
* This file lists all the methods needed for formatting.
* @requires ojs/ojcore
* @requires ojs/ojvalidation
* @requires knockout
*/
define([
"ojs/ojcore",
"knockout",
"base-models/validations/obdx-locale",
"framework/js/constants/constants",
"ojs/ojvalidation"
], function (oj, ko, BaseLocale, Constants) {
/**
* This file lists all the methods needed for formatting.
* @class
* @alias Formatter
* @memberof module:baseModel
*/
"use strict";
var FormatterModel = function () {
/**
* Assign this to self.
* @member {Object}
*/
var self = this;
/**
* This function is used to format the number into percent value
* @function formatNumber
* @instance
* @memberof Formatter
* @param {Float} number - This field indicates the number in decimal format which has to be formatted
* @param {String} style - This field indicates the style which should be used for formatting the number, like percent or decimal
* @param {Integer} [maximumFractionDigits=2] - This field indicates the maximum digits permissible after the decimal.
* @param {Integer} [minimumFractionDigits=2] - This field indicates the minimum digits permissible after the decimal.
* @returns {String} The formatted number e.g. 50.00%.
* @example
* self.formatNumber(63.2512/100, 'percent', 2, 1);
* // returns "63.25%"
*/
self.formatNumber = function (number, style, maximumFractionDigits, minimumFractionDigits) {
var formatOption, numberConverter;
maximumFractionDigits = maximumFractionDigits || 2;
minimumFractionDigits = minimumFractionDigits || 2;
formatOption = {
style: style,
maximumFractionDigits: maximumFractionDigits,
minimumFractionDigits: minimumFractionDigits
};
numberConverter = oj.Validation.converterFactory("number").createConverter(formatOption);
return numberConverter.format(number);
};
/**
* This function is used to format the date as per the standard format of the users locale.
* It internally uses oj.Validation.converterFactory for formatting.
*
| Format | *Style | *
|---|---|
| dateFormat | *dd MMM yyyy | *
| dateMonthFormat | *dd MMM | *
| dateTimeStampFormat | *dd MMM yyyy hh:mm:ss a | *
| dateTimehhmmFormat | *dd MMM yyyy hh:mm a | *
| timeFormat | *h:mm a | *
| monthYearFormat | *MMM yyyy | *
| dateTimeFormat | *dd MMM hh:mm a | *
| timeStampFormat | *hh:mm:ss | *
DateTimeConverter object using date format as dd MMM YYYY.
* @instance
* @memberof Formatter
* @alias dateConverter
* @type {DateTimeConverter}
*/
self.dateConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({
pattern: BaseLocale.dateFormat
});
/**
* Returns DateTimeConverter object using time format as hh:mm.
* @instance
* @memberof Formatter
* @alias timeConverter
* @type {DateTimeConverter}
*/
self.timeConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({
"hour": "2-digit",
"hour12": false,
"minute": "2-digit"
});
/**
* Returns DateTimeConverter object using date time format as dd MMM yyyy hh:mm a.
* @instance
* @memberof Formatter
* @alias dateTimeConverter
* @type {DateTimeConverter}
*/
self.dateTimeConverter = oj.Validation.converterFactory(oj.ConverterFactory.CONVERTER_TYPE_DATETIME).createConverter({
pattern: BaseLocale.dateTimehhmmFormat
});
/**
* This function is used to format the currency as per the standard format for a particular currency.
* @instance
* @function formatCurrency
* @param {Float} amount This field indicates the amount in decimal format which has to be formatted
* @param {String} currencyCode This field indicates the standard ISO currency code which should be used for formatting the amount
* @memberof Formatter
* @returns {String} The formatted amount e.g. $5,000.00
* @example self.formatCurrency(2502.25, 'GBP') //returns "£2,502.25"
*/
self.formatCurrency = function (amount, currencyCode, hideUnit) {
var salOptions = {
style: "currency",
currency: currencyCode,
useGrouping: true,
currencyDisplay: 'symbol',
pattern: hideUnit ? '###,###' : '###,### ¤',
separators: {
decimal: '.',
group: '.'
}
};
if ('VND' != currencyCode) {
salOptions = {
style: "currency",
currency: currencyCode,
useGrouping: true,
currencyDisplay: 'symbol',
pattern: '###,###.##',
separators: {
decimal: '.',
group: '.'
}
};
var salaryConverter = oj.Validation.converterFactory("number").createConverter(salOptions);
return salaryConverter.format(amount) + ' ' + currencyCode;
}
var salaryConverter = oj.Validation.converterFactory("number").createConverter(salOptions);
return salaryConverter.format(amount);
};
self.formatCurrencyVN = function (strAmt) {
var a = strAmt.toString();
a = a.replace(/VND/g, "").replace(/ /g, "").replace(/,/g, "").replace(/\./g, "");
var b = self.formatCurrency(a, 'VND').replace("VND", "").replace(" ", "");
return b;
};
function amttowordeng(amount) {
var s = amount.toString();
var th = ['', 'THOUSAND', 'MILLION', 'BILLION', 'TRILLION'];
var dg = ['ZERO', 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE'];
var tn = ['TEN', 'ELEVEN', 'TWELVE', 'THIRTEEN', 'FOURTEEN', 'FIFTEEN', 'SIXTEEN', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN'];
var tw = ['TWENTY', 'THIRTY', 'FORTY', 'FIFTY', 'SIXTY', 'SEVENTY', 'EIGHTY', 'NINETY'];
s = s.replace(/[\, ]/g, '');
var x = s.indexOf('.');
if (x == -1) {
x = s.length;
}
if (x > 15) {
alert('This number is too big to convert in words');
}
var n = s.split('');
var str = '';
var sk = 0;
for (var i = 0; i < x; i++) {
if ((x - i) % 3 == 2) {
if (n[i] == '1') {
str += tn[Number(n[i + 1])] + ' ';
i++;
sk = 1;
} else if (n[i] != 0) {
str += tw[n[i] - 2] + ' ';
sk = 1;
}
} else if (n[i] != 0) {
str += dg[n[i]] + ' ';
if ((x - i) % 3 == 0) {
str += 'HUNDRED ';
}
sk = 1;
}
if ((x - i) % 3 == 1) {
if (sk) str += th[(x - i - 1) / 3] + ' ';
sk = 0;
}
}
if (x != s.length) {
var y = s.length;
str += 'POINT ';
for (var i = x + 1; i < y; i++) {
str += dg[n[i]] + ' ';
}
}
if (str != '') {
str = str.toLowerCase() + 'only';
} else {
str = str.toLowerCase();
}
var strWord = str;
var strWordFirst = strWord.substr(0, 1).toUpperCase() + strWord.substr(1);
return strWordFirst;
};
var chu = "kh\u00f4ng m\u1ed9t hai ba b\u1ed1n n\u0103m s\u00e1u b\u1ea3y t\u00e1m ch\u00edn".split(" "), donvi = ";m\u01b0\u01a1i;tr\u0103m;ngh\u00ecn;m\u01b0\u01a1i;tr\u0103m;tri\u1ec7u;m\u01b0\u01a1i;tr\u0103m;t\u1ef7;m\u01b0\u01a1i;tr\u0103m;ngh\u00ecn t\u1ef7;m\u01b0\u01a1i;tr\u0103m;tri\u1ec7u t\u1ef7;m\u01b0\u01a1i;tr\u0103m;t\u1ef7 t\u1ef7;m\u01b0\u01a1i;tr\u0103m;".split(";");
function converttochar(b) {
var unitWord = b%1000 === 0? ' \u0111\u1ED3ng ch\u1EB5n':' \u0111\u1ED3ng';
for (var c = "", c = b + "", b = c.length, a = "", d = a = "", f = "", a = "", e = b; 0 < e; e--)a = tach3(c.substr(b - e, b)), "null" != a ? (f = "" == a ? f + a : f + a + " " + donvi[e - 3] + " ", e -= 2) : (a = c.substr(b - e).substr(0, 1), "1" == a && "m\u01b0\u01a1i" == donvi[e - 1] && 1 < e ? d = a = "m\u01b0\u1eddi" : (a = "1" == a ? "m\u01b0\u01a1i" != donvi[e] ? "m\u1ed9t" : "m\u01b0\u1eddi" == d ? " m\u1ed9t" : e == b ? "m\u1ed9t" : "m\u1ed1t" : "5" == a ? "m\u01b0\u01a1i" != donvi[e] ? "n\u0103m" : 0 == f.length ? "n\u0103m" : " l\u0103m" : "m\u01b0\u1eddi" == d ? "0" == a ? "" : "5" == a ? " l\u0103m" : " " + chu[a] :
"0" == a ? "" : chu[a], d = " "), f += a, "m\u01b0\u1eddi" != d && (f = f + " " + donvi[e - 1] + " "));
return f.substr(0, 1).toUpperCase() + f.substr(1) + unitWord;
}
function tach3(b) {
var c = "null"; if (0 == b.length % 3) {
var a = b.substr(0, 3), d = a.substr(0, 1), b = a.substr(1, 1), a = a.substr(2, 1); "0" == d && "0" == b && "0" == a ? c = "" : "0" == d && "0" == b && "0" != a ? c = "l\u1ebb " + chu[a] : "0" == d && "0" != b && "0" == a ? (c = "kh\u00f4ng tr\u0103m ", c = "1" == b ? c + "m\u01b0\u1eddi" : c + chu[b] + " m\u01b0\u01a1i") : "0" == d && "0" != b && "0" != a ? (c = "kh\u00f4ng tr\u0103m", d = chu[a], "n\u0103m" == d && (d = "l\u0103m"), c = "1" == b ? c + " m\u01b0\u1eddi " + d : "1" == a ? c + " " + chu[b] + " m\u01b0\u01a1i m\u1ed1t" : c + " " + chu[b] + " m\u01b0\u01a1i " + d) : "0" !=
d && "0" == b && "0" == a ? c = chu[d] + " tr\u0103m" : "0" != d && "0" == b && "0" != a ? c = chu[d] + " tr\u0103m l\u1ebb " + chu[a] : "0" != d && ("0" != b && "0" == a) && (c = chu[d] + " tr\u0103m", c = "1" == b ? c + " m\u01b0\u1eddi" : c + " " + chu[b] + " m\u01b0\u01a1i")
} return c
};
self.getAmountInWords = function (amount, ccy) {
console.log(ccy)
var language = sessionStorage.getItem("user-locale") || document.getElementsByTagName("html")[0].getAttribute("lang") || "en";
if (language === 'en') {
//eng
return amttowordeng(Number(amount).toString());
} else if (language === 'vn') {
//vn
return converttochar(Number(amount).toString().replace(/VND/g, "").replace(/ /g, "").replace(/,/g, "").replace(/\./g, ""));
}
};
self.resizeBase64Img = function(base64, width, height) {
var canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
var context = canvas.getContext("2d");
var deferred = $.Deferred();
var img = new Image();
img.onload = function() {
context.scale(width/this.width, height/this.height);
context.drawImage(this, 0, 0);
deferred.resolve(canvas.toDataURL());
};
img.src = base64;
return deferred.promise();
};
};
return FormatterModel;
});